package orderoid.formulaire;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.ExecutionException;

import orderoid.singleton.SingletonClient;
import orderoid.singleton.SingletonCommande;
import orderoid.singleton.SingletonRestaurant;
import orderoid.soap.business.webServiceCommande;
import orderoid.soap.classeCommune.Commande;
import orderoid.soap.classeCommune.Menu;
import orderoid.soap.classeCommune.Produit;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class OrderoidValidationPanierActivity extends Activity
{
	private ListView	listPanier;
	private double		prixTotal;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.validationpanier);
		prixTotal = 0.0;

		Commande com = SingletonCommande.getInstance().getCommande();

		// Recuperation de la listview creee dans le fichier main.xml
		listPanier = (ListView) findViewById(R.id.listPanier);

		// Creation de la ArrayList qui nous permettra de remplire la listView
		ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();

		// liste des produit et des menu commandés
		List<Produit> listeProduit = com.getListProduit();
		List<Menu> listeMenu = com.getListMenu();

		// On declare la HashMap qui contiendra les informations pour un item
		HashMap<String, String> map;

		// on traite la liste de produit dans un premier temps
		for (Produit p : listeProduit)
		{
			map = new HashMap<String, String>();

			map.put("titrePanier", p.getNom());
			map.put("prixItem", Double.toString(p.getMontant()) + "€");
			prixTotal += p.getMontant();

			// que l'on stocke dans une array list d'affichage
			listItem.add(map);
		}

		// ensuite on s'occupe des menu
		for (Menu m : listeMenu)
		{
			map = new HashMap<String, String>();

			map.put("titrePanier", m.getNom());
			map.put("prixItem", Double.toString(m.getMontant()) + "€");
			prixTotal += m.getMontant();

			// que l'on stocke dans une array list d'affichage
			listItem.add(map);
		}

		// et enfin le prix total

		map = new HashMap<String, String>();
		map.put("titrePanier", "Prix Total: ");
		map.put("prixItem", Double.toString(prixTotal) + "€ soit " + Double.toString((prixTotal * 6.56)) + "F");
		listItem.add(map);

		// Cr�ation d'un SimpleAdapter qui se chargera de mettre les items pr�sent dans notre list (listItem) dans la vue affichageitem
		SimpleAdapter mSchedule = new SimpleAdapter(this.getBaseContext(), listItem, R.layout.affichage_panier, new String[] { "titrePanier",
				"prixItem" }, new int[] { R.id.titrePanier, R.id.prixItem });

		// On attribut � notre listView l'adapter que l'on vient de cr�er
		listPanier.setAdapter(mSchedule);
	}

	public void validerMonPanier(View view)
	{
		// le panier et donc valide il suffit de passé la commande

		// on formatte les menus dans un premier temps
		String idsMenusFormatted = new String();
		for (Menu m : SingletonCommande.getInstance().getCommande().getListMenu())
		{
			if (idsMenusFormatted.isEmpty())
			{
				idsMenusFormatted = Integer.toString(m.getIdMenu());
			}
			else
			{
				idsMenusFormatted += ";" + Integer.toString(m.getIdMenu());
			}
		}
		if(idsMenusFormatted.isEmpty()){
			idsMenusFormatted = null;		
		}
		

		// on formatte les menus dans un premier temps
		String idsProductsFormatted = new String();
		for (Produit p : SingletonCommande.getInstance().getCommande().getListProduit())
		{
			if (idsProductsFormatted.isEmpty())
			{
				idsProductsFormatted = Integer.toString(p.getIdProduit());
			}
			else 
			{
				idsProductsFormatted += ";" + Integer.toString(p.getIdProduit());	
			}
			
		}
		if(idsProductsFormatted.isEmpty()){
			idsMenusFormatted = null;		
		}

		String idAdresse = Integer.toString(SingletonClient.getInstance().getAdresse().getIdAdresse());
		String idClient = Integer.toString(SingletonClient.getInstance().getClient().getIdClient());
		String idRestaurant = Integer.toString(SingletonRestaurant.getInstance().getRestaurant().getIdRestaurant());

		// on prepare les arguments pour l'appel du web service
		webServiceCommande ws = new webServiceCommande();

		Boolean commandeValid = false;

		try
		{
			commandeValid = ws.execute(idsMenusFormatted, idsProductsFormatted, idAdresse, idClient, idRestaurant).get();
		} catch (InterruptedException e)
		{
			e.printStackTrace();
		} catch (ExecutionException e)
		{
			e.printStackTrace();
		}

		if (commandeValid.booleanValue())
		{
			Context context = getApplicationContext();
      		CharSequence text = "Commande déroulé avec succés";
      		int duration = Toast.LENGTH_SHORT;

      		Toast toast = Toast.makeText(context, text, duration);
      		toast.show();
      		
			// lance la fenetre suivante
      		Intent main = new Intent(this, OrderoidConfirmationPanierActivity.class);
      		startActivity(main);
		}
		else
		{
			Context context = getApplicationContext();
      		CharSequence text = "Une erreur c'est produit durant l'enregistrement de votre commande veuillez recommencer";
      		int duration = Toast.LENGTH_SHORT;

      		Toast toast = Toast.makeText(context, text, duration);
      		toast.show();
		}
	}

	public void afficheListeProduit(View view)
	{
		Intent produit = new Intent(this, OrderoidListeProduitActivity.class);
		startActivity(produit);
	}

	public void afficheListeMenu(View view)
	{
		Intent menu = new Intent(this, OrderoidListeMenuActivity.class);
		startActivity(menu);
	}

	public void retourAccueil(View view)
	{
		Intent accueil = new Intent(this, OrderoidMainActivity.class);
		// lance la fenetre precedente
		startActivity(accueil);
	}
}